package oj.util.sUtil;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;

public class JasperOJ {
	private JasperReport jasperReport;
	private JasperPrint jasperPrint;

	/**
	 * 
	 * Con este metodo se exporta desde un servidor a xls o pdf, segun un
	 * reporte generado por iReport
	 * 
	 * OJG 23/11/07
	 * 
	 */
	public void exportarXls(String sql, String pathJRXMLOrigen,
			String pathJRXMLDestino, Connection con, Boolean pdf)
			throws JRException, SQLException {

		try {

			// PATH del Archivo Jasper
			String fileName = pathJRXMLOrigen;

			// PATH del Archivo XLS destino
			String fileDestino = pathJRXMLDestino + ".xls";

			Map parametros = new HashMap();

			/**
			 * 
			 * ver como setear la conexcion
			 */
			// Con esta clase se trabaja se setea el SQL y la Conecxion
			// SReportSRDsSql reportDs = new SReportSRDsSql();
			// reportDs.setConnection(con);
			// reportDs.setSql(sql);
			// Preparacion del Reporte (se inserta el valor del query en el
			// reporte)
			JasperDesign desig = JRXmlLoader.load(fileName);
			JasperReport jr = JasperCompileManager.compileReport(desig);

			// Aca setea lo que es la conexion
			// JasperPrint jasperPrint = JasperFillManager.fillReport(jr,
			// parametros,
			// new SReportDataSource(reportDs.getDataSet()));

			if (pdf.booleanValue()) {
				// PATH del Archivo PDF destino
				String fileDestino2 = pathJRXMLOrigen + ".pdf";

				// Creacion del PDF
				JasperExportManager.exportReportToPdfFile(jasperPrint,
						fileDestino2);
			}

			// Creacion del XLS
			JRXlsExporter exportar = new JRXlsExporter();

			exportar
					.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			exportar.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
					fileDestino);

			exportar.setParameter(
					JRXlsExporterParameter.IS_FONT_SIZE_FIX_ENABLED,
					Boolean.TRUE);
			exportar.setParameter(
					JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
					Boolean.TRUE);
			exportar.setParameter(
					JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
					Boolean.FALSE);
			exportar.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
					Boolean.TRUE);

			exportar.exportReport();

		} catch (Exception e) {
			try {
				throw new Exception("Error");
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}

	}

	public void generarPdf(Connection con, String nombreArchivo,
			String nombreArchivoFinal, HashMap parametros) {

		String archivoDestino = "";
		String archivoFinal = "";
		HUtil util = new HUtil();

		try {

			archivoDestino = util.leerConfiguracion(1) + "/" + nombreArchivo
					+ ".jrxml";

			archivoFinal = util.leerConfiguracion(2) + "/" + nombreArchivoFinal
					+ ".pdf";

			// Compilo el JRXML

			jasperReport = JasperCompileManager.compileReport(archivoDestino);
			// Le seteo
			// el DataSource y a traves de un Mapa los parametros del // reporte

			Map map = parametros;
			// map.put("P_USER", "omar");

			jasperPrint = JasperFillManager.fillReport(jasperReport, map, con);

			// Exporto a PDF

			JasperExportManager
					.exportReportToPdfFile(jasperPrint, archivoFinal);

			JasperViewer viewer = new JasperViewer(jasperPrint, false);
			viewer.show(); // Lenvantar aplicacion

		} catch (Exception e) {

			e.printStackTrace();
		}

	}

}
